package com.learn;
/*
给你两个整数 left 和 right ，在闭区间 [left, right] 范围内，统计并返回 计算置位位数为质数 的整数个数。

计算置位位数 就是二进制表示中 1 的个数。

例如， 21 的二进制表示 10101 有 3 个计算置位。
 */
public class num_762 {
    static class Solution {
        public static int countPrimeSetBits(int left, int right) {
            //先找出区间内数值的计算置位

            //用这个方法可以找出1的数量 Integer.bitCount()
            int answer=0;
            for (int i = left; i <= right; i++) {
                if (isPrime(Integer.bitCount(i))){
                    ++answer;
                }
            }
            //在判断数组内有几个质数
            return answer;
        }
        private static boolean isPrime(int i) {
            if (i<2){
                return false;
            }
            for (int j = 2; j * j <= i; j++) {
                if (i % j == 0) {
                    return false;
                }
            }
            return true;
        }
    }

    public static void main(String[] args) {
        int left=6;
        int right=10;
        int i = Solution.countPrimeSetBits(left, right);
        System.out.println(i);
    }
}
